SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
-- Para Pruebas
CREATE PROCEDURE [dbo].[spDiasDeLicencias3]
@Agente int,
@P_FDesde datetime,
@P_FHasta datetime,
@P_CodLic int,
@P_HoC varchar(1),
@Aplicacion int,
@Turno int
AS

-- APLICACION  1 = Al servicio especifico / 2 = A todos los servicios del mismo turno / 3 = A todos los servicios del agente
-- TURNOS 1 = Mañana / 2 = Tarde / 3 = Vespertino / 4 = Nocturno / 5 = Indefinido / 6 = Rotativo / 7 = Completo / 8 = Alternado
SET NOCOUNT ON
set dateformat dmy

declare @MFA datetime
declare @MFB datetime
declare @RFA datetime
declare @RFB datetime
declare @RBaja varchar(1)
declare @RSitLab int
declare @ContDias int
declare @dhdiff int
declare @msg varchar(200)

if @Aplicacion = 2
begin
	DECLARE Licencias INSENSITIVE CURSOR FOR	SELECT ss.FechaAlta,ss.Baja,case ss.confirmada when 'N' then ss.FechaTermino else ss.FechaBaja end FechaBaja,ss.SituacionLaboral 
	FROM tb_SubServiciosAgentes ss, tb_ServiciosAgentes s, tb_Plazas p 
	where s.Agente=@agente and (ss.Baja='N' or ss.FechaBaja>=@P_FDesde) 
	and ss.FechaAlta<@P_FHasta and licencia=@P_CodLic 
	and s.idServicioAgente = ss.ServicioAgente 
	and idPlaza = Plaza and p.Turno = @Turno
	Order by ss.FechaAlta
	FOR READ ONLY
end
else
begin
	DECLARE Licencias INSENSITIVE CURSOR FOR	SELECT ss.FechaAlta,ss.Baja,case ss.confirmada when 'N' then ss.FechaTermino else ss.FechaBaja end FechaBaja,ss.SituacionLaboral FROM tb_SubServiciosAgentes ss, tb_ServiciosAgentes s 
	where s.Agente=@agente and (ss.Baja='N' or ss.FechaBaja>=@P_FDesde) 
	and ss.FechaAlta<@P_FHasta and licencia=@P_CodLic 
	and s.idServicioAgente = ss.ServicioAgente Order by ss.FechaAlta	FOR READ ONLY
end

OPEN Licencias

FETCH NEXT FROM Licencias INTO @RFA,@RBaja,@RFB,@RSitLab

-- Considera la posibilidad de Cursor Vacio
if @@FETCH_STATUS=0
	select @MFA=@RFA,@MFB=dateadd(day,-1,@RFA),@ContDias=0
else
	select @MFA=@P_FDesde,@MFB=dateadd(day,-1,@P_FDesde),@ContDias=0


-- Recorrido del Cursor (Proyeccion sobre X)
While @@FETCH_STATUS=0 
	BEGIN	
	--print 'Fecha Alta Sub Servicio: '+convert(varchar,@MFA)+' '
	if @RBaja='N' or @RFB>@P_FHasta
			select @RFB=@P_FHasta
	select @msg=" Dias "+convert(char,@ContDias)+" MFA="+convert(char,@MFA)+" MFB="+convert(char,@MFB)+" RFA="+convert(char,@RFA)+" RFB="+convert(char,@RFB)
	print @msg
	if @RFA>@MFB
			BEGIN
			if @P_HoC="C"
				select @ContDias=@ContDias+(DateDiff(day,@MFA,@MFB)+1)
			else
				BEGIN
				execute @dhdiff=spdifdiashabiles @MFA,@MFB
				select @ContDias=@ContDias+@dhdiff
				END
			select @MFA=@RFA,@MFB=@RFB
			END
	else
			BEGIN
			if  @RFB>@MFB 
				select @MFB=@RFB
			END
	
	FETCH NEXT FROM Licencias INTO @RFA,@RBaja,@RFB,@RSitLab	
	
	END

CLOSE Licencias
DEALLOCATE Licencias

if @P_HoC="C"
	select @ContDias=@ContDias+(DateDiff(day,@MFA,@MFB)+1)
else
	BEGIN
	execute @dhdiff=spdifDiasHabiles @MFA,@MFB
	select @ContDias=@ContDias+@dhdiff
	END

print cast(@contdias as varchar(3))

RETURN (@ContDias)
GO
